﻿// 5070. 前序遍历.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <vector>

using namespace std;

/*
https://www.acwing.com/problem/content/description/5073/

假设二叉树上各结点的权值互不相同且都为正整数。

给定二叉树的后序遍历和中序遍历，请你输出二叉树的前序遍历的最后一个数字。

输入格式
第一行包含整数 N，表示二叉树结点总数。

第二行给出二叉树的后序遍历序列。

第三行给出二叉树的中序遍历序列。

输出格式
输出二叉树的前序遍历的最后一个数字。

数据范围
1≤N≤50000
,
二叉树结点权值范围 [1,109]。

输入样例：
7
1 2 3 4 5 6 7
2 1 4 3 7 5 6
输出样例：
5
*/

const int N = 50010;
int post[N];
int mid[N];
//vector<int> ans;
int ans[N]; int idx = 0;
int n;

void GetPrev(int post[], int pl, int pr, int mid[], int ml, int mr) {
	int midv = post[pr];
	int i = ml;
	if (pl > pr) return;
	//for (i = ml; i <= mr; i++) {
	//	if (mid[i] == midv) break;
	//}

	int l = ml; int r = mr;
	while (l <= r) {
		if (mid[l] == midv) { i = l; break; }
		if (mid[r] == midv) { i = r; break; }
		l++; r--;
	}

	int midrlen = mr - i;
	//ans.push_back(midv);
	ans[idx++] = midv;
	GetPrev(post, pl, pr - 1 - midrlen, mid, ml, i - 1);
	GetPrev(post, pr - midrlen, pr - 1, mid, i + 1, mr);
}


int main()
{
	//cin >> n;
	scanf("%d", &n);
	for (int i = 0; i < n; i++) {
		//cin >> post[i];
		scanf("%d", &post[i]);
	}
	for (int i = 0; i < n; i++) {
		//cin >> mid[i];
		scanf("%d", &mid[i]);
	}

	GetPrev(post, 0, n - 1, mid, 0, n - 1);

	cout << ans[idx-1]<< endl;

	return 0;
}

